Behavioral Finance
Se tiene una semana (7 días) de trading para poder elaborar este laboratorio. Gracias al laboratorio, es que podemos llevar a cabo este laboratorio.
Este laboratorio tiene como propósito particular el elaborar herramientas para el análisis del desempeño de la actividad de trading, desde el punto de vista de la cuenta y desde el punto de vista de la persona que opera la cuenta (trader). Por lo tanto, este laboratorio estará dividido en 4 partes, cada una, servirá para cumplir con la estructura básica de proyectos para sistemas de trading y las otras 3 partes son relacionadas cada una a los propósitos del módulo completo.
# Librerías
import functions
import visualizations
import pandas as pd
import plotly.io as pio
A continuación se presentan las dependencias de archivo necesarias para correr este cuaderno.
Fernanda Amador
f_FA = (functions.f_leer_archivo("files/Positions_FA.csv")
.pipe(functions.f_columnas_tiempos)
.pipe(functions.f_columnas_pips))
tab_rank_FA = functions.f_estadisticas_ba(f_FA)
tab_rank_FA["df_1_tabla"]
| medida | valor | descripcion | |
|---|---|---|---|
| 0 | ops totales | 34.000000 | operaciones totales |
| 1 | ganadoras | 13.000000 | operaciones ganadoras |
| 2 | ganadoras_c | 12.000000 | operaciones ganadoras de compra |
| 3 | ganadoras_v | 1.000000 | operaciones ganadoras de venta |
| 4 | perdedoras | 21.000000 | operaciones perdedoras |
| 5 | perdedoras_c | 16.000000 | operaciones perdedoras de compra |
| 6 | perdedoras_v | 5.000000 | operaciones perdedoras de venta |
| 7 | mediana (profit) | -0.016500 | mediana de profit de operaciones |
| 8 | mediana (pips) | -0.007500 | mediana de pips de operaciones |
| 9 | r_efectividad | 0.382353 | ganadoras totales/operaciones totales |
| 10 | r_proporcion | 0.619048 | ganadoras totales/perdedoras totales |
| 11 | r_efectividad_c | 0.352941 | ganadoras compras/operaciones totales |
| 12 | r_efectividad_v | 0.029412 | ganadoras ventas/operaciones totales |
Ana Dürrmüller
f_AD = (functions.f_leer_archivo("files/Positions_AD.csv")
.pipe(functions.f_columnas_tiempos)
.pipe(functions.f_columnas_pips))
tab_rank_AD = functions.f_estadisticas_ba(f_AD)
tab_rank_AD["df_1_tabla"]
| medida | valor | descripcion | |
|---|---|---|---|
| 0 | ops totales | 23.000000 | operaciones totales |
| 1 | ganadoras | 8.000000 | operaciones ganadoras |
| 2 | ganadoras_c | 6.000000 | operaciones ganadoras de compra |
| 3 | ganadoras_v | 2.000000 | operaciones ganadoras de venta |
| 4 | perdedoras | 15.000000 | operaciones perdedoras |
| 5 | perdedoras_c | 14.000000 | operaciones perdedoras de compra |
| 6 | perdedoras_v | 1.000000 | operaciones perdedoras de venta |
| 7 | mediana (profit) | -0.193880 | mediana de profit de operaciones |
| 8 | mediana (pips) | -0.063000 | mediana de pips de operaciones |
| 9 | r_efectividad | 0.347826 | ganadoras totales/operaciones totales |
| 10 | r_proporcion | 0.533333 | ganadoras totales/perdedoras totales |
| 11 | r_efectividad_c | 0.260870 | ganadoras compras/operaciones totales |
| 12 | r_efectividad_v | 0.086957 | ganadoras ventas/operaciones totales |
Gerardo Gónzalez
f_GG = (functions.f_leer_archivo("files/Positions_GG.csv")
.pipe(functions.f_columnas_tiempos)
.pipe(functions.f_columnas_pips))
tab_rank_GG = functions.f_estadisticas_ba(f_GG)
tab_rank_GG["df_1_tabla"]
| medida | valor | descripcion | |
|---|---|---|---|
| 0 | ops totales | 30.000000 | operaciones totales |
| 1 | ganadoras | 13.000000 | operaciones ganadoras |
| 2 | ganadoras_c | 7.000000 | operaciones ganadoras de compra |
| 3 | ganadoras_v | 6.000000 | operaciones ganadoras de venta |
| 4 | perdedoras | 17.000000 | operaciones perdedoras |
| 5 | perdedoras_c | 14.000000 | operaciones perdedoras de compra |
| 6 | perdedoras_v | 3.000000 | operaciones perdedoras de venta |
| 7 | mediana (profit) | -0.040845 | mediana de profit de operaciones |
| 8 | mediana (pips) | -0.037000 | mediana de pips de operaciones |
| 9 | r_efectividad | 0.433333 | ganadoras totales/operaciones totales |
| 10 | r_proporcion | 0.764706 | ganadoras totales/perdedoras totales |
| 11 | r_efectividad_c | 0.233333 | ganadoras compras/operaciones totales |
| 12 | r_efectividad_v | 0.200000 | ganadoras ventas/operaciones totales |
Maximiliano García
f_MG = (functions.f_leer_archivo("files/Positions_MGM.csv")
.pipe(functions.f_columnas_tiempos)
.pipe(functions.f_columnas_pips))
tab_rank_MG = functions.f_estadisticas_ba(f_MG)
tab_rank_MG["df_1_tabla"]
| medida | valor | descripcion | |
|---|---|---|---|
| 0 | ops totales | 25.000000 | operaciones totales |
| 1 | ganadoras | 14.000000 | operaciones ganadoras |
| 2 | ganadoras_c | 5.000000 | operaciones ganadoras de compra |
| 3 | ganadoras_v | 9.000000 | operaciones ganadoras de venta |
| 4 | perdedoras | 11.000000 | operaciones perdedoras |
| 5 | perdedoras_c | 8.000000 | operaciones perdedoras de compra |
| 6 | perdedoras_v | 3.000000 | operaciones perdedoras de venta |
| 7 | mediana (profit) | 0.006000 | mediana de profit de operaciones |
| 8 | mediana (pips) | 0.004000 | mediana de pips de operaciones |
| 9 | r_efectividad | 0.560000 | ganadoras totales/operaciones totales |
| 10 | r_proporcion | 1.272727 | ganadoras totales/perdedoras totales |
| 11 | r_efectividad_c | 0.200000 | ganadoras compras/operaciones totales |
| 12 | r_efectividad_v | 0.360000 | ganadoras ventas/operaciones totales |
# Fernanda Amador
tab_rank_FA["df_2_ranking"]
| Symbol | Rank | |
|---|---|---|
| 0 | EURUSD | 57.142857 |
| 1 | GBPJPY | 50.000000 |
| 2 | GBPUSD | 50.000000 |
| 3 | USDCHF | 50.000000 |
| 4 | EURGBP | 33.333333 |
| 5 | USDCAD | 20.000000 |
| 6 | USDMXN | 0.000000 |
# Ana Dürrmüller
tab_rank_AD["df_2_ranking"]
| Symbol | Rank | |
|---|---|---|
| 0 | USDCHF | 83.333333 |
| 1 | EURGBP | 50.000000 |
| 2 | USDJPY | 33.333333 |
| 3 | USDCAD | 25.000000 |
| 4 | EURUSD | 0.000000 |
| 5 | GBPJPY | 0.000000 |
| 6 | GBPUSD | 0.000000 |
# Gerardo Gonzalez
tab_rank_GG["df_2_ranking"]
| Symbol | Rank | |
|---|---|---|
| 0 | EURGBP | 100.000000 |
| 1 | USDCHF | 100.000000 |
| 2 | EURMXN | 66.666667 |
| 3 | EURNOK | 50.000000 |
| 4 | USDMXN | 50.000000 |
| 5 | GBPJPY | 25.000000 |
| 6 | USDCAD | 25.000000 |
| 7 | EURUSD | 20.000000 |
| 8 | EURCHF | 0.000000 |
| 9 | GBPUSD | 0.000000 |
# Maximiliano García
tab_rank_MG["df_2_ranking"]
| Symbol | Rank | |
|---|---|---|
| 0 | GBPJPY | 100.000000 |
| 1 | GBPUSD | 100.000000 |
| 2 | NZDUSD | 100.000000 |
| 3 | USDCAD | 75.000000 |
| 4 | EURGBP | 66.666667 |
| 5 | EURUSD | 50.000000 |
| 6 | USDJPY | 50.000000 |
| 7 | AUDUSD | 0.000000 |
| 8 | EURJPY | 0.000000 |
| 9 | USDMXN | 0.000000 |
# Fernanda Amador
mad_df_FA = functions.f_evolucion_capital(f_FA)
mad_df_FA
| profit_d | profit_acm_d | |
|---|---|---|
| timestamp | ||
| 2023-02-21 | -0.02800 | 99999.97200 |
| 2023-02-23 | -1.23900 | 99998.73300 |
| 2023-02-24 | -1.18111 | 99997.55189 |
| 2023-02-27 | 8.98400 | 100006.53589 |
| 2023-02-28 | -96.80162 | 99909.73427 |
| 2023-03-01 | -0.33300 | 99909.40127 |
| 2023-03-02 | -1.40560 | 99907.99567 |
# Ana Dürrmüller
mad_df_AD = functions.f_evolucion_capital(f_AD)
mad_df_AD
| profit_d | profit_acm_d | |
|---|---|---|
| timestamp | ||
| 2023-02-28 | -0.10819 | 99999.89181 |
| 2023-03-01 | -55.22389 | 99944.66792 |
| 2023-03-02 | -319.43170 | 99625.23622 |
# Gerardo Gonzalez
mad_df_GG = functions.f_evolucion_capital(f_GG)
mad_df_GG
| profit_d | profit_acm_d | |
|---|---|---|
| timestamp | ||
| 2023-02-24 | 15.23086 | 100015.23086 |
| 2023-02-28 | -7.80069 | 100007.43017 |
| 2023-03-01 | -12.63869 | 99994.79148 |
| 2023-03-02 | -25.02336 | 99969.76812 |
| 2023-03-03 | 0.73810 | 99970.50622 |
# Maximiliano García
mad_df_MG = functions.f_evolucion_capital(f_MG)
mad_df_MG
| profit_d | profit_acm_d | |
|---|---|---|
| timestamp | ||
| 2023-02-28 | -8.36400 | 99991.63600 |
| 2023-03-01 | 123.47400 | 100115.11000 |
| 2023-03-02 | -1.86150 | 100113.24850 |
| 2023-03-03 | -68.80696 | 100044.44154 |
benchmark_df = functions.f_benchmark("files/sp500.csv")
#Fernanda Amador
mad_statistics_FA, mad_hist_FA = functions.f_estadisticas_mad(mad_df_FA,benchmark_df)
mad_statistics_FA
| metrica | unidad | valor | descripcion | |
|---|---|---|---|---|
| 0 | sharpe_original | Cantidad | -124.970938 | Sharpe Ratio Fórmula Original |
| 1 | sharpe_actualizado | Cantidad | 0.078069 | Sharpe Ratio Fórmula Ajustada |
| 2 | drawdown_capi | Fecha Inicial | 2023-02-21 | Fecha inicial del DrawDown de Capital |
| 3 | drawdown_capi | Fecha Final | 2023-03-02 | Fecha final del DrawDown de Capital |
| 4 | drawdown_capi | DrawDown $ (capital) | -91.97633 | Máxima pérdida flotante registrada |
| 5 | drawup_capi | Fecha Inicial | 2023-03-02 | Fecha inicial del DrawUp de Capital |
| 6 | drawup_capi | Fecha Final | 2023-03-02 | Fecha final del DrawUp de Capital |
| 7 | drawup_capi | DrawDown $ (capital) | 8.984 | Máxima ganancia flotante registrada |
# Ana Sofía Durrmuller
mad_statistics_AD, mad_hist_AD = functions.f_estadisticas_mad(mad_df_AD,benchmark_df)
mad_statistics_AD
| metrica | unidad | valor | descripcion | |
|---|---|---|---|---|
| 0 | sharpe_original | Cantidad | -27.697276 | Sharpe Ratio Fórmula Original |
| 1 | sharpe_actualizado | Cantidad | -0.311013 | Sharpe Ratio Fórmula Ajustada |
| 2 | drawdown_capi | Fecha Inicial | 2023-02-28 | Fecha inicial del DrawDown de Capital |
| 3 | drawdown_capi | Fecha Final | 2023-03-02 | Fecha final del DrawDown de Capital |
| 4 | drawdown_capi | DrawDown $ (capital) | -374.65559 | Máxima pérdida flotante registrada |
| 5 | drawup_capi | Fecha Inicial | 2023-03-02 | Fecha inicial del DrawUp de Capital |
| 6 | drawup_capi | Fecha Final | 2023-03-02 | Fecha final del DrawUp de Capital |
| 7 | drawup_capi | DrawDown $ (capital) | -0.10819 | Máxima ganancia flotante registrada |
# Gerardo Gonzalez
mad_statistics_GG, mad_hist_GG = functions.f_estadisticas_mad(mad_df_GG,benchmark_df)
mad_statistics_GG
| metrica | unidad | valor | descripcion | |
|---|---|---|---|---|
| 0 | sharpe_original | Cantidad | -465.704423 | Sharpe Ratio Fórmula Original |
| 1 | sharpe_actualizado | Cantidad | -0.53389 | Sharpe Ratio Fórmula Ajustada |
| 2 | drawdown_capi | Fecha Inicial | 2023-02-24 | Fecha inicial del DrawDown de Capital |
| 3 | drawdown_capi | Fecha Final | 2023-03-03 | Fecha final del DrawDown de Capital |
| 4 | drawdown_capi | DrawDown $ (capital) | -44.72464 | Máxima pérdida flotante registrada |
| 5 | drawup_capi | Fecha Inicial | 2023-03-02 | Fecha inicial del DrawUp de Capital |
| 6 | drawup_capi | Fecha Final | 2023-03-03 | Fecha final del DrawUp de Capital |
| 7 | drawup_capi | DrawDown $ (capital) | 15.23086 | Máxima ganancia flotante registrada |
#Maximiliano García
mad_statistics_MG, mad_hist_MG = functions.f_estadisticas_mad(mad_df_MG,benchmark_df)
mad_statistics_MG
| metrica | unidad | valor | descripcion | |
|---|---|---|---|---|
| 0 | sharpe_original | Cantidad | -51.076936 | Sharpe Ratio Fórmula Original |
| 1 | sharpe_actualizado | Cantidad | -0.534867 | Sharpe Ratio Fórmula Ajustada |
| 2 | drawdown_capi | Fecha Inicial | 2023-02-28 | Fecha inicial del DrawDown de Capital |
| 3 | drawdown_capi | Fecha Final | 2023-03-03 | Fecha final del DrawDown de Capital |
| 4 | drawdown_capi | DrawDown $ (capital) | 52.80554 | Máxima pérdida flotante registrada |
| 5 | drawup_capi | Fecha Inicial | 2023-03-03 | Fecha inicial del DrawUp de Capital |
| 6 | drawup_capi | Fecha Final | 2023-03-03 | Fecha final del DrawUp de Capital |
| 7 | drawup_capi | DrawDown $ (capital) | 123.474 | Máxima ganancia flotante registrada |
#Fernanda Amador
mad_hist_FA
| profit_d | profit_acm_d | timestamp | max_capital | drawdown | |
|---|---|---|---|---|---|
| timestamp | |||||
| 2023-02-21 | -0.02800 | 99999.97200 | 2023-02-21 | 99999.97200 | 0.000000 |
| 2023-02-23 | -1.23900 | 99998.73300 | 2023-02-23 | 99999.97200 | 0.000012 |
| 2023-02-24 | -1.18111 | 99997.55189 | 2023-02-24 | 99999.97200 | 0.000024 |
| 2023-02-27 | 8.98400 | 100006.53589 | 2023-02-27 | 100006.53589 | 0.000000 |
| 2023-02-28 | -96.80162 | 99909.73427 | 2023-02-28 | 100006.53589 | 0.000968 |
| 2023-03-01 | -0.33300 | 99909.40127 | 2023-03-01 | 100006.53589 | 0.000971 |
| 2023-03-02 | -1.40560 | 99907.99567 | 2023-03-02 | 100006.53589 | 0.000985 |
#Ana Durrmuller
mad_hist_AD
| profit_d | profit_acm_d | timestamp | max_capital | drawdown | |
|---|---|---|---|---|---|
| timestamp | |||||
| 2023-02-28 | -0.10819 | 99999.89181 | 2023-02-28 | 99999.89181 | 0.000000 |
| 2023-03-01 | -55.22389 | 99944.66792 | 2023-03-01 | 99999.89181 | 0.000552 |
| 2023-03-02 | -319.43170 | 99625.23622 | 2023-03-02 | 99999.89181 | 0.003747 |
#Gerardo Gonzalez
mad_hist_GG
| profit_d | profit_acm_d | timestamp | max_capital | drawdown | |
|---|---|---|---|---|---|
| timestamp | |||||
| 2023-02-24 | 15.23086 | 100015.23086 | 2023-02-24 | 100015.23086 | 0.000000 |
| 2023-02-28 | -7.80069 | 100007.43017 | 2023-02-28 | 100015.23086 | 0.000078 |
| 2023-03-01 | -12.63869 | 99994.79148 | 2023-03-01 | 100015.23086 | 0.000204 |
| 2023-03-02 | -25.02336 | 99969.76812 | 2023-03-02 | 100015.23086 | 0.000455 |
| 2023-03-03 | 0.73810 | 99970.50622 | 2023-03-03 | 100015.23086 | 0.000447 |
#Maximiliano García
mad_hist_MG
| profit_d | profit_acm_d | timestamp | max_capital | drawdown | |
|---|---|---|---|---|---|
| timestamp | |||||
| 2023-02-28 | -8.36400 | 99991.63600 | 2023-02-28 | 99991.636 | 0.000000 |
| 2023-03-01 | 123.47400 | 100115.11000 | 2023-03-01 | 100115.110 | 0.000000 |
| 2023-03-02 | -1.86150 | 100113.24850 | 2023-03-02 | 100115.110 | 0.000019 |
| 2023-03-03 | -68.80696 | 100044.44154 | 2023-03-03 | 100115.110 | 0.000706 |
#Fernanda Amador
ranking_FA = visualizations.ranking_vis(tab_rank_FA["df_2_ranking"])
ranking_FA.show(renderer = "notebook")
#Ana Durrmuller
ranking_AD = visualizations.ranking_vis(tab_rank_AD["df_2_ranking"])
ranking_AD.show(renderer = "notebook")
#Gerardo Gonzalez
ranking_GG = visualizations.ranking_vis(tab_rank_GG["df_2_ranking"])
ranking_GG.show(renderer = "notebook")
#Maximiliano García
ranking_MG = visualizations.ranking_vis(tab_rank_MG["df_2_ranking"])
ranking_MG.show(renderer = "notebook")
#Fernanda Amador
d_up_down_FA, de_FA = functions.f_behavioural_finance(f_FA)
d_up_down_FA['resultados']['dataframe']
| ocurrencias | status_quo | aversion_perdida | sensibilidad_decreciente | |
|---|---|---|---|---|
| 0 | 6 | 33.333333 | 0.0 | No |
#Ana Durrmuller
d_up_down_AD, de_AD = functions.f_behavioural_finance(f_AD)
d_up_down_AD['resultados']['dataframe']
| ocurrencias | status_quo | aversion_perdida | sensibilidad_decreciente | |
|---|---|---|---|---|
| 0 | 6 | 0.0 | 16.666667 | No |
#Gerardo Gonzalez
d_up_down_GG, de_GG = functions.f_behavioural_finance(f_GG)
d_up_down_GG['resultados']['dataframe']
| ocurrencias | status_quo | aversion_perdida | sensibilidad_decreciente | |
|---|---|---|---|---|
| 0 | 6 | 83.333333 | 16.666667 | No |
#Maximiliano Garcia
d_up_down_MG, de_MG = functions.f_behavioural_finance(f_MG)
d_up_down_MG['resultados']['dataframe']
| ocurrencias | status_quo | aversion_perdida | sensibilidad_decreciente | |
|---|---|---|---|---|
| 0 | 5 | 100.0 | 20.0 | No |
#Fernanda Amador
dd_du_FA = visualizations.drawdwn_vis(mad_hist_FA,mad_statistics_FA)
dd_du_FA.show(renderer = "notebook")
#Ana Durrmuller
dd_du_AD = visualizations.drawdwn_vis(mad_hist_AD,mad_statistics_AD)
dd_du_AD.show(renderer = "notebook")
#Gerardo Gonzalez
dd_du_GG = visualizations.drawdwn_vis(mad_hist_GG,mad_statistics_GG)
dd_du_GG.show(renderer = "notebook")
#Maximiliano Garcia
dd_du_MG = visualizations.drawdwn_vis(mad_hist_MG,mad_statistics_MG)
dd_du_MG.show(renderer = "notebook")
#Fernanda Amador
dE_FA = visualizations.de_vis(d_up_down_FA["resultados"]["dataframe"],de_FA)
dE_FA.show(renderer = "notebook")
#Ana Durrmuller
dE_AD = visualizations.de_vis(d_up_down_AD["resultados"]["dataframe"],de_AD)
dE_AD.show(renderer = "notebook")
#Gerardo Gonzalez
dE_GG = visualizations.de_vis(d_up_down_GG["resultados"]["dataframe"],de_GG)
dE_GG.show(renderer = "notebook")
#Maximiliano García
dE_MG = visualizations.de_vis(d_up_down_MG["resultados"]["dataframe"],de_MG)
dE_MG.show(renderer = "notebook")
Este laboratorio nos ayudo a entender la capacidad del trader para analizar y mejorar su desempeño en el mercado. Si bien cada uno de nosotros implementó estrategias y técnicas de análisis diferentes, ninguno pudo obtener una ganancia significativa en sus operaciones con divisas. Aunque estos resultados pueden ser decepcionantes, el laboratorio de trading brindó una oportunidad valiosa para que experimentemos lo que siente un verdadero trader. Es importante recordar que el trading con divisas es una actividad que conlleva un alto nivel de riesgo y requiere habilidades y conocimientos especializados. Es normal experimentar pérdidas en el camino, especialmente para aquellos que están empezando en el mundo del trading.
En el caso de un trader, el valor esperado de los rendimientos se utiliza para evaluar el desempeño de su estrategia de trading. Si el valor esperado de los rendimientos es positivo, significa que la estrategia tiene una probabilidad de obtener ganancias en promedio. Por lo tanto, el trader puede utilizar esta medida para evaluar la eficacia de su estrategia y tomar decisiones de inversión informadas. El DrawDown y el DrawUp están estrechamente relacionados con el riesgo en una cuenta de trading. Ambas medidas son importantes para evaluar la rentabilidad y la gestión de riesgos de una cuenta de trading. Los traders deben monitorear regularmente estas medidas y ajustar sus estrategias de trading y gestión de riesgos en consecuencia para lograr un rendimiento óptimo.